import { IPSControl } from '../ipscontrol';
import { IPSControlAction } from '../ipscontrol-action';
import { IPSControlContainer } from '../ipscontrol-container';
import { IPSLayoutContainer } from '../layout/ipslayout-container';
import { IPSPanelField } from './ipspanel-field';
import { IPSPanelItem } from './ipspanel-item';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSPanel
 */
export interface IPSPanel extends IPSControl, IPSControlContainer, IPSLayoutContainer {
  /**
   * 面板字段项集合
   *
   * @type {IPSPanelField[]}
   */
  getAllPSPanelFields(): IPSPanelField[] | null;

  /**
   * 面板字段项集合
   *
   * @type {IPSPanelField[]}
   */
  get allPSPanelFields(): IPSPanelField[] | null;

  findPSPanelField(objKey: any): IPSPanelField | null;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 面板数据模式
   * @description 值模式 [面板数据模式] {0：不获取（使用传入数据）、 1：未传入时获取、 2：始终获取、 3：绑定到应用全局变量、 4：绑定到路由视图会话变量、 5：绑定到当前视图会话变量 }
   * @type {( number | 0 | 1 | 2 | 3 | 4 | 5)}
   * @default 0
   */
  dataMode: number | 0 | 1 | 2 | 3 | 4 | 5;

  /**
   * 数据对象名称
   * @type {string}
   */
  dataName: string;

  /**
   * 面板数据刷新间隔
   * @type {number}
   * @default -1
   */
  dataTimer: number;

  /**
   * 获取数据行为
   *
   * @type {IPSControlAction}
   */
  getGetPSControlAction(): IPSControlAction | null;

  /**
   * 获取数据行为
   *
   * @type {IPSControlAction}
   */
  get getPSControlAction(): IPSControlAction | null;

  /**
   * 获取数据行为（必须存在）
   *
   * @type {IPSControlAction}
   */
  getGetPSControlActionMust(): IPSControlAction;

  /**
   * 布局模式
   * @description 值模式 [面板布局模型] {TABLE：表格、 TABLE_12COL：栅格布局（12列）、 TABLE_24COL：栅格布局（24列）、 FLEX：Flex布局、 BORDER：边缘布局、 ABSOLUTE：绝对布局 }
   * @type {( string | 'TABLE' | 'TABLE_12COL' | 'TABLE_24COL' | 'FLEX' | 'BORDER' | 'ABSOLUTE')}
   */
  layoutMode: string | 'TABLE' | 'TABLE_12COL' | 'TABLE_24COL' | 'FLEX' | 'BORDER' | 'ABSOLUTE';

  /**
   * 面板样式
   * @type {string}
   */
  panelStyle: string;

  /**
   * 面板宽度
   * @type {number}
   * @default 0.0
   */
  panelWidth: number;

  /**
   * 面板顶级成员集合
   *
   * @type {IPSPanelItem[]}
   */
  getRootPSPanelItems(): IPSPanelItem[] | null;

  /**
   * 面板顶级成员集合
   *
   * @type {IPSPanelItem[]}
   */
  get rootPSPanelItems(): IPSPanelItem[] | null;

  findRootPSPanelItem(objKey: any): IPSPanelItem | null;

  /**
   * 布局面板
   * @type {boolean}
   * @default false
   */
  layoutPanel: boolean;

  /**
   * 移动端面板
   * @type {boolean}
   * @default false
   */
  mobilePanel: boolean;
}
